home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_11_12 / allison / string.hpp < prev    next >
C/C++ Source or Header  |  1993-10-10  |  2KB  |  98 lines

  1. LISTING 1 - String Class Definition and Inline Functions
  2. #if !defined(STRING_HPP)
  3. #define STRING_HPP
  4.  
  5. #include <stddef.h>
  6. #include <assert.h>
  7.  
  8. class istream;
  9. class ostream;
  10.  
  11. const size_t NPOS = (size_t) -1;    // "SIZE_T_MAX"
  12.  
  13. class string
  14. {
  15. public:
  16.     // Constructors / Destructor
  17.     string();
  18.     string(const string& s);
  19.     string(const char *s, size_t n = NPOS);
  20.     ~string();
  21.  
  22.     // Assignment
  23.     string& operator=(const string& s);
  24.  
  25.     // Concatenation
  26.     string& operator+=(const string& s);
  27.     friend string operator+(const string& s1, const string& s2);
  28.  
  29.     // Predicates
  30.     friend int operator==(const string&, const string&);
  31.     friend int operator!=(const string&, const string&);
  32.  
  33.     // Subscripting
  34.     char get_at(size_t pos) const;
  35.     void put_at(size_t pos, char c);
  36.     string substr(size_t pos, size_t n = NPOS) const;
  37.  
  38.     // Searching
  39.     size_t find(const string& s, size_t pos = 0) const;
  40.     size_t find_first_of(const string& s, size_t pos = 0) const;
  41.     size_t find_first_not_of(const string& s, size_t pos = 0)
  42.       const;
  43.  
  44.     // I/O
  45.     friend ostream& operator<<(ostream&, const string&);
  46.     friend istream& operator>>(istream& is, string&);
  47.  
  48.     // Miscellaneous
  49.     size_t length() const;
  50.     const char *c_str() const;
  51.  
  52. private:
  53.     char *data;
  54.     size_t count;   // Doesn't include terminating 0
  55.  
  56.     void clone(const char *s, size_t n);
  57. };
  58.  
  59. inline string::string()
  60. {
  61.     *(data = new char[1]) = '\0';
  62.     count = 0;
  63. }
  64.  
  65. inline string::string(const string& s)
  66. {
  67.     clone(s.data,s.count);
  68. }
  69.  
  70. inline string::~string()
  71. {
  72.     delete [] data;
  73. }
  74.  
  75. inline string operator+(const string& s1, const string& s2)
  76. {
  77.     string s(s1);
  78.     return s += s2;
  79. }
  80.  
  81. inline char string::get_at(size_t pos) const
  82. {
  83.     assert(pos < count);
  84.     return data[pos];
  85. }
  86.  
  87. inline size_t string::length() const
  88. {
  89.     return count;
  90. }
  91.  
  92. inline const char * string::c_str() const
  93. {
  94.     return data;
  95. }
  96.  
  97. #endif
  98.